单值(唯一值)专题图 Sample详情
最后更新时间:2019年7月5日
单值专题图又称唯一值专题图,在单值专题图上,是用不同的颜色或图案表示属性表中指定字段的每一个不同的值,强调数据中的类别差异。比如在制作土地利用单值专题图时,可以用特定的颜色来表示每一种土地利用类型;在行政区划图中,可以对每个行政区设置不同的图形参数来体现各个区的大小范围。
1
MGSMap *map=[mapView map]; MGSVectorLayer *layer=(MGSVectorLayer *)[map getLayerAtIndex:i];
2
在创建单值专题图之前,不仅要确定对哪一个图层进行创建,还要确定对此图层中哪一个属性字段的值进行创建。所以需要对选定图层中所有要素,获取选定的字段的属性值,作为单值专题图创建的数据来源。一般采用地图要素查询功能获取。
//查询要素 MGSFeaturePagedResult *queryResult=[featureQuery query]; //创建数组用来存储查询得到的数据 NSMutableArray *selectFieldValueArr=[[NSMutableArray alloc] init]; //遍历所有的要素 for (int i=0; i < queryResult.pageCount; i++) { //返回页码对应的结果,页码从一开始计数 NSArray<MGSFeature *> *featureArray=[queryResult getPageWithPageNumber:i+1]; //对每一页获取要素 for (int j=0; j < [featureArray count]; j++) { //获取要素 MGSFeature *feature=featureArray[j]; //获取属性字典 NSDictionary<NSString *,NSString *> *featureAtt=[feature attributes]; //获取属性值 NSString *fieldValue1=[featureAtt objectForKey:selectFieldName]; //存到数组中 [selectFieldValueArr addObject:fieldValue1]; } }
3
为选定图层中的所有要素创建几何图形信息(GeomInfo),在此以区图层为例。
//创建区几何图形信息对象 MGSRegInfo *regInfo=[[MGSRegInfo alloc] init]; [regInfo setFillClr:(int)(1 + (arc4random() % (1500 - 1 + 1)))]; //设置填充颜色(参考当前使用的MapGIS颜色库颜色编号)
4
针对图层中每一个地图要素创建单值专题图绘制信息对象(UniqueThemeInfo),用来接收几何图形信息,并为其设置属性值。
//创建单值专题图绘制信息对象 MGSUniqueThemeInfo *uniqueThemeInfo=[[MGSUniqueThemeInfo alloc] init]; [uniqueThemeInfo setMaxScale:0]; //最大显示比 [uniqueThemeInfo setMinScale:0]; //最小显示比 [uniqueThemeInfo setIsVisible:YES]; //可见性 //设置名称 [uniqueThemeInfo setCaption:[NSString stringWithFormat:@"第%d个",i]]; //设置值,这里设置value时要根据uniqueTheme设置的Expression属性字段来,并且要与每个要素的属性值一一对应 [uniqueThemeInfo setValue:_selectFieldValueArr[i]]; //为专题图信息设置图形信息 [uniqueThemeInfo setGeoInfo:regInfo];
5
创建单值专题图对象,设置名称、字段表达式等参数,并且添加所有要素对应的绘制信息对象(uniqueThemeInfo)。
//创建单值专题图对象 MGSUniqueTheme *uniqueTheme=[[MGSUniqueTheme alloc] init]; //为单值专题图对象添加项,即设置绘制信息 [_uniqueTheme append:uniqueThemeInfo]; [_uniqueTheme setExpression:selectFieldName]; //设置字段表达式 [_uniqueTheme setName:@"单值专题图"]; //名称 [_uniqueTheme setVisible:YES]; //可见性
6
获取专题图集合Thems,调用其append方法添加专题图。
// 将专题图添加到对应矢量图层上 [[mapLayer themes] append:uniqueTheme]; [mapView forceRefresh];
实现效果如下图所示: